package reflect;

import java.lang.reflect.Method;

/**
 * 暴力反射
 */
public class ReflectDemo6 {
    public static void main(String[] args) throws Exception {
//        Person p = new Person();
//        p.hehe();//编译不通过,私有方法不可以在类的外部被访问

        Class cls = Class.forName("reflect.Person");
        Object obj = cls.newInstance();
        /*
            Class获取方法:
            Method[] getMethods(...)
            Method getMethod(...)
            上述两个方法仅能获取该类定义的所有[公开]方法,包含从超类继承的


            Method[] getDeclaredMethods(...)
            Method getDeclaredMethod(...)
            上述两个方法可以获取到本类自己定义的方法,包含私有方法
         */
//        Method[] methods = cls.getDeclaredMethods();
//        for (Method method : methods){
//            System.out.println(method.getName());
//        }


//        Method method = cls.getMethod("hehe");
        Method method = cls.getDeclaredMethod("hehe");
        method.setAccessible(true);//强行打开其访问权限
        method.invoke(obj);//obj.hehe();
        method.setAccessible(false);//好习惯,用完了关上
    }
}
